﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using BrowserGameFramework.DBConnector;
using BrowserGameFramework.DBConnector.SqlServer;
using System.Data.SqlClient;
using System.Xml;
using System.Xml.XPath;

namespace BrowserGameFrameworkTest.Database
{
    /// <summary>
    /// Zusammenfassungsbeschreibung für SqlServerTest
    /// </summary>
    [TestClass]
    public class SqlServerTest
    {
        public SqlServerTest()
        {
            //
            // TODO: Konstruktorlogik hier hinzufügen
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Ruft den Textkontext mit Informationen über
        ///den aktuellen Testlauf sowie Funktionalität für diesen auf oder legt diese fest.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Zusätzliche Testattribute
        //
        // Sie können beim Schreiben der Tests folgende zusätzliche Attribute verwenden:
        //
        // Verwenden Sie ClassInitialize, um vor Ausführung des ersten Tests in der Klasse Code auszuführen.
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Verwenden Sie ClassCleanup, um nach Ausführung aller Tests in einer Klasse Code auszuführen.
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen. 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void TestCallProcedureSelect()
        {
            SqlDbHandler handler = SqlDbHandler.GetInstance();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "test";


            XPathDocument result = handler.CallProcedureSelect(cmd);
        }

        [TestMethod]
        public void TestCallProcedureExecute()
        {
            SqlDbHandler handler = SqlDbHandler.GetInstance();
            SqlCommand cmd = new SqlCommand();

            SqlParameter par = new SqlParameter("result", System.Data.SqlDbType.Int);
            par.Direction = System.Data.ParameterDirection.ReturnValue;

            cmd.CommandText = "test";
            cmd.Parameters.Add(par);

            XmlDocument result = handler.CallProcedureExecute(cmd);
        }

        [TestMethod]
        public void TestCallDirectSelect()
        {
            SqlDbHandler handler = SqlDbHandler.GetInstance();
            XPathDocument result = handler.CallDirectSelect("Select * from [user]");
        }

        [TestMethod]
        public void TestCallXmlProcedureSelect()
        {
            SqlCommand cmd = new SqlCommand("test");

            SqlDbHandler handler = SqlDbHandler.GetInstance();
            XPathDocument xDoc = handler.CallXmlProcedureSelect(cmd);

            XPathNavigator navi = xDoc.CreateNavigator();
          
            Assert.IsFalse(string.IsNullOrEmpty(navi.InnerXml));
        }
    }
}
